mindmap
root((Java 反序列化漏洞))
Day1 序列化基础
Serializable 接口
ObjectOutputStream
ObjectInputStream
魔数 AC ED
类描述符/字段/句柄
readObject / writeObject
readResolve 回调
transient 关键字
动手: hexdump 看结构
Day2 为什么是漏洞
readObject 自动触发
不需要显式调用
Gadget Chain 概念
危险接口
InvocationHandler
Transformer
Comparator
ScriptEngine
只要类路径有危险类即可利用
Day3 CC1 链
Transformer 体系
ConstantTransformer
InvokerTransformer
ChainedTransformer
AnnotationInvocationHandler
invoke 触发点
LazyMap.get 中间节点
动手: ysoserial 生成 payload
动手: IDEA 单步调试
动手: 手写 CC1 链
Day4 更多 Gadget 链
CC3: InstantiateTransformer
绕过 CC1 修复
CC6: HashMap/Hashtable
不依赖 AnnotationInvocationHandler
实战更稳定
CommonsBeanutils1
BeanComparator 触发
无 CC 有 CB 时可用
JRE8u20
JDK 自身链
无第三方库依赖
动手: 逐个生成+调试
Day5 实战利用与检测
找入口点
readObject / readUnshared
XMLDecoder
XStream
Fastjson
Jackson
Hessian
检测危险依赖
commons-collections
commons-beanutils
spring-aop
JdkDynamicAopProxy
工具
ysoserial
marshalsec
SerializationDumper
绕 WAF
类名混淆
GZIP 压缩
分块传输
动手: 本地漏洞 demo 打通
Day6 修复与防御
白名单机制
ObjectInputFilter JDK9+
ValidatingObjectInputStream
黑名单机制
过滤危险类名
不完整可被绕过
禁用本地 Class
重写 resolveClass
替代方案
JSON Jackson/Gson
Protobuf
禁用原生序列化
Day7 实战复盘
真实 CVE 分析
CVE-2020-2555 WebLogic
CVE-2015-7501 CommonsCollections
阅读分析报告
还原 gadget chain
画漏洞思维导图